/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controladores;

import JPAControllers.*;
import JPAControllers.LoginJpaController;
import JPAControllers.exceptions.*;
import Persistencia.*;
import dominio.*;
import java.util.List;
import java.util.logging.*;
import JPAControllers.*;
import Validadores.*;
import dominio.*;
import java.util.ArrayList;
import java.util.List;

public class ControladorPaciente {
    Paciente paciente;
    PacienteDomain pacienteD;
    PacienteJpaController controlador = new PacienteJpaController();
    ControladorSesion controladorSesion=new ControladorSesion();
    ControladorTratamiento controladorTratamiento=new ControladorTratamiento();
    ValidarFecha objValid=new ValidarFecha();
    private int excep=0;
    public String guardarPaciente(){
        String result="";
        excep=0;
        try {
            controlador = new PacienteJpaController();
            setPaciente(1);
            controlador.create(paciente);
            result="Se agrego exitosamente el paciente con cedula: "+paciente.getCedula();
            return result;
        }catch (Exception ex) {
            
                Paciente removido = buscarPacienteRemovido(paciente.getCedula());
                if(removido != null && removido.getEstado().equals("0")){                    
                    removido.setEstado("1");
                    setPac(removido);
                    modificarPaciente();
                    result="Se reactivo exitosamente el paciente con cedula: "+paciente.getCedula();
                }else{
                    result="No se pudo agregar el paciente con cedula: "+paciente.getCedula()+". No puede haber dos pacientes con la misma cedula";
                }            
            return result;
        }
    }

    public List<Paciente> encontrarPacientes(){
        controlador = new PacienteJpaController();
        List<Paciente> pacTota=controlador.findPacienteEntities();
        List<Paciente> pacFin=new ArrayList();
        for(int i=0;i<pacTota.size();i++){
            if(pacTota.get(i).getEstado().equals("1")){
                pacFin.add(pacTota.get(i));
            }
        }
        return pacFin;
    }

    public List<Paciente> encontrarPacientesSinAsginar(String idFisio){
        controlador = new PacienteJpaController();
        List<Sesion> sesTotal=controladorSesion.encontrarSesiones();
        List<Paciente> pacTota=controlador.findPacienteEntities();
        for(int j=0;j<pacTota.size();j++){
            for(int i=0;i<sesTotal.size();i++){
                if(sesTotal.get(i).getEstado().equals("1")&&
                        !(""+sesTotal.get(i).getFisioterapeuta().getIdFisioterapeuta()).equals(idFisio)&&
                        (""+pacTota.get(j).getIdPaciente()).equals((""+sesTotal.get(i).getPaciente().getIdPaciente()))&&
                        pacTota.get(j).getEstado().equals("1")){
                        pacTota.remove(j);
                        j--;
                        break;
                }
            }
        }        
        return pacTota;
    }

    public void eliminarPaciente(){
        try {
            controlador = new PacienteJpaController();
            paciente.setEstado("0");
            controlador.edit(paciente);
        }catch (Exception ex) {
            Logger.getLogger(ControladorFisioterapeuta.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void modificarPaciente(){
        try {
            System.out.println("JUAJA "+paciente);
            controlador.edit(paciente);
        }catch (Exception ex) {
            Logger.getLogger(ControladorFisioterapeuta.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public void setPaciente(int i){
        paciente=new Paciente();
        java.util.Date date = new java.util.Date();
        java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("dd/MM/yyyy");
        String fecha = sdf.format(date);
        paciente.setEstado("1");
        paciente.setApellido(pacienteD.getApellido());
        paciente.setCedula(pacienteD.getCedula());
        paciente.setDiagnosticoMedico(pacienteD.getDiagnosticoMedico());
        paciente.setFechaNacimiento(pacienteD.getFechaNacimiento());
        paciente.setEdad(objValid.getEdad(paciente.getFechaNacimiento()));
        paciente.setEps(pacienteD.getEps());
        paciente.setHistoriaClinica(pacienteD.getHistoriaClinica());
        paciente.setMedicoRemitente(pacienteD.getMedicoRemitente());
        paciente.setNombre(pacienteD.getNombre());
        paciente.setNombreAcudiente(pacienteD.getNombreAcudiente());
        paciente.setTipoPaciente(pacienteD.getTipoPaciente());
        if(i==0){            
            paciente.setFechaIngreso(encontrarPaciente(""+pacienteD.getIdPaciente()).getFechaIngreso());
        }else{
            paciente.setFechaIngreso(fecha);
        }

    }

    public void setPacienteMod(){
        paciente.setIdPaciente(Integer.parseInt(pacienteD.getIdPaciente()));        
        paciente.setSesionList(controladorSesion.encontrarMisSesionesPac(""+paciente.getIdPaciente()));
    }

    public void setPacienteD(PacienteDomain in){
        pacienteD=in;
        setFechas();
    }

    public void setPac(Paciente in){
        paciente=in;
    }


    public void setFechas(){        
        pacienteD.setFechaNacimiento(pacienteD.getFechaNacimientoDia()+"/"+pacienteD.getFechaNacimientoMes()+"/"+pacienteD.getFechaNacimientoAno());
        System.out.println(pacienteD.getFechaNacimiento()+"  fecha nac set fechas");
    }

    public List<Paciente> encontrarMisPacientes(String idFisio){
        System.out.println("IDFISIO "+idFisio);
        int id=Integer.parseInt(idFisio);
        controladorSesion=new ControladorSesion();
        List<Sesion> listaTodos=controladorSesion.encontrarSesiones();
        List<Integer> listPacientes=new ArrayList<Integer>();
        List<Paciente> lista=new ArrayList<Paciente>();
        for(int i=0;i<listaTodos.size();i++){
            System.out.println(listaTodos.get(i).getFisioterapeuta().getIdFisioterapeuta()+" ----++---- "+id);
            if(listaTodos.get(i).getFisioterapeuta().getIdFisioterapeuta()==id){
                listPacientes.add(listaTodos.get(i).getPaciente().getIdPaciente());
            }
        }
        List<Paciente> listaTodosPacientes=encontrarPacientes();
        System.out.println(listaTodosPacientes+"  todos");
        System.out.println(listPacientes+"  pac");
        for(int i=0;i<listaTodosPacientes.size();i++){
            for(int j=0;j<listPacientes.size();j++){
                System.out.println(listaTodosPacientes.get(i).getIdPaciente()+" **--** "+listPacientes.get(j).intValue());

                if(listaTodosPacientes.get(i).getIdPaciente()==listPacientes.get(j).intValue()&&listaTodosPacientes.get(i).getEstado().equals("1")){
                    System.out.println(listaTodosPacientes.get(i)+"   ENTRE");
                    lista.add(listaTodosPacientes.get(i));
                    j=listPacientes.size();
                }
            }
        }
        System.out.println(lista+" listo");
        return lista;
    }

    public Paciente encontrarPaciente(String idPaciente) {
        Paciente pac=new Paciente();
        List<Paciente> listaTodosPacientes=encontrarPacientes();
        for(int i=0;i<listaTodosPacientes.size();i++){
            if(listaTodosPacientes.get(i).getIdPaciente().intValue()==Integer.parseInt(idPaciente)){
                pac=(listaTodosPacientes.get(i));
            }
        }
        return pac;
    }

    private Paciente buscarPacienteRemovido(String id) {
        controlador = new PacienteJpaController();
        Paciente ob = null;
        List<Paciente> obj = controlador.findPacienteEntities();
        if(obj!=null){
            for(int i=0;i<obj.size();i++){
                if(id.equals(""+obj.get(i).getCedula())){
                    ob = obj.get(i);
                }
            }
        }
        return ob;
    }

    public PacienteDomain convertirDomain(Paciente log) {
        PacienteDomain pacRet=new PacienteDomain();
        pacRet.setEstado(log.getEstado());
        pacRet.setIdPaciente(""+log.getIdPaciente());
        pacRet.setApellido(log.getApellido());
        pacRet.setCedula(log.getCedula());
        pacRet.setDiagnosticoMedico(log.getDiagnosticoMedico());
        pacRet.setEdad(log.getEdad());
        pacRet.setEps(log.getEps());
        pacRet.setHistoriaClinica(log.getHistoriaClinica());
        pacRet.setMedicoRemitente(log.getMedicoRemitente());
        pacRet.setNombre(log.getNombre());
        pacRet.setNombreAcudiente(log.getNombreAcudiente());
        pacRet.setTipoPaciente(log.getTipoPaciente());
        pacRet.setFechaIngreso(log.getFechaIngreso());
        pacRet.setFechaNacimiento(log.getFechaNacimiento());
        pacRet.setFechaNacimientoDia(log.getFechaNacimiento().split("/")[0]);
        pacRet.setFechaNacimientoMes(log.getFechaNacimiento().split("/")[1]);
        pacRet.setFechaNacimientoAno(log.getFechaNacimiento().split("/")[2]);
        return pacRet;
    }
}
